iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0

今天就是鐵人賽最後一天了,回想過去的一個月裡真的做了很多的事情,感謝鐵人賽能讓我的生活變得更豐富(爆炸?)以及充實。透過這次的鐵人賽也讓我有機會能夠整理關於 Data pipeline 以及 Airflow 相關的經驗,自己在過程當中得到了許多,非常感謝主辦單位以及各位讀者!

在最後一天我們來談談 Data pipeline 的優化方向,我們知道,對於 Data pipeline 的設計和實作我們很難一次就做到完美,甚至我們都不確定有沒有完美的存在,但我們可以不斷的優化,讓我們所建立的 Data pipeline 盡可能達到我們心中的完美!這邊提供一些優化方向進行思考。

效能優化

效能優化是一個非常大的主題,簡單來說就是讓 Data pipeline的執行更有效率,然而要達到這個目的,方法卻有千百種。下面提供一些方向供大家進行參考及分析。

資源調整:

無腦直接提升硬體規格或是加開雲端的資源,基本上會收到一定的效果。但是要做的更精細,也讓資源更妥善地被利用,需要了解整個系統的效能瓶頸並進行分析及應對。另外也要確保 Airflow 有足夠的計算資源,包含CPU和記憶體,根據工作的負載調整節點的數量,讓系統可以處理同時執行的任務。

DAG 最佳化

檢查 DAG 定義的流程是最佳化的,避免過多的任務依賴和循環依賴。我們在 Relations 的篇章有學習到 Airflow 的相依性,如果有些 Task 多了不必要的關聯性的話,那執行上就會多了不必要的等待時間,因此也會降低 DAG 執行的效率。因此 DAG 的設計對於效能的影響也是不能小覷的。

分散式執行任務

在一些情景中,特別是如果工作負載量非常大且可以並行執行的話,可以考慮使用分散式執行器, 像是 Celery,用以平行處理任務。Celery是一個分散式任務佇列系統,可以用來執行異步任務,例如後台處理、異步任務處理、定時任務等。Airflow可以使用Celery 作為其執行器之一,我們可以將Airflow的任務交給Celery執行,從而實現異步、分散式任務處理,藉此分擔負載,提高效能。在這邊由於篇幅關係我們無法做完整的介紹,如果有興趣的朋友可以參考Celery Executor官方網站資源

資料庫性能優化、SQL 指令優化

在我們的Airflow 系統中會與資料庫有密切的協作,其中主要可以分成兩種:

  • Airflow 內部系統
  • Airflow 對接的外部系統

不論是對於內部或是外部,資料庫性能都會影響到 DAG 的執行效率。Airflow 系統本身使用資料庫來儲存元數據和任務狀態。因此要確認資料庫設置和性能是否足以支持工作負載。而對於使用的 SQL 指令,也須根據情境使用適合的指令來保持 DAG 的執行效率。

安全性優化

對於 Data 團隊來說,安全性是非常重要的,特別是如果處理的資料是非常敏感的資料時,如果安全性有問題的話,很容易會讓資料遭到竊取。而安全性的部分,主要可以分為系統管理層以及連接層,系統管理層主要是關於使用者的部分,如何很好的管控使用者的權限,避免有人得到過高的權限而觸碰到不該觸碰到的資料。對於連接層則是要避免有意人士透過網路安全漏洞,以各種方法竊取 Data。

  • 使用 Airflow role 管理使用者
    Airflow 內建有管理使用者的 Role ,包含Admin, Public, Viewer、User、Op,管理者可以根據需求善用role。細部的 role 設定可以參考此官方連結
  • 資訊加密
    對於 Airflow 內部的重要的資訊像是參數、密碼等,可以使用 Airflow 提供的加密功能進行資訊的保護。
  • 連接管理
    在連接外部的資源時,要注意資料傳輸的安全性,也盡量多使用 HTTPS 等加密的協定以確保 Data 不會被輕易的取得。

Log 管理

我們都知道 Data pipeline 需要持續優化,但是怎麼判斷如何優化呢?如果沒有頭緒的時候,透過 Log 的資訊會提供我們許多的方向。因此如果能妥善的管理 Airflow 的 Log 可以對整個系統的幫助有所提升。Airflow 的 Log 主要可以分成三大來源:

  • Webserver 紀錄了 Web 操作互動的紀錄
  • Scheduler 紀錄了 Scheduler 的活動主要包含 DAG 解析,分配工作等。
  • Task 紀錄了 Task 執行的過程

在預設中 logs 都被儲存在 $AIRFLOW_HOME/logs,我們可以隨著我們需求進行解析及管理,甚至與可以對應到視覺化監測的系統像是 Grafana 等系統進行監控。透過 Log 管理以及解析,讓開發者及維運者能更通曉 Airflow 整體的執行狀況進而提升。

完賽感想

今天跟大家分享了 Data pipeline的優化方向,就像是我們的 Data pipeline 需要持續優化一樣,身為工程師的我們也需要不斷的提升,讓我們能夠具備更多的價值,幫助我們的團隊以及我們自己能夠不斷的成長。

如同一開始所說的在上個月的期間真的做了很多事,也不會忘記那些一邊旅遊一邊趕稿的日子,反而因此讓旅遊變得更加深刻,再次感謝主辦單位以及各位夥伴和讀者朋友們的陪伴!

最後附上在鐵人賽期間去日本摩耶山看到非常美的夜景照片,當天為了到山上看夜景位置,要先搭兩段的纜車才能到達,不過看到夜景時真的覺得充滿悸動,我想我們的人生也像是這樣吧,當我們不斷爬到更高的位置的時候,就能看到更美麗更絢麗的風景!共勉之!

2023鐵人賽,完賽!
https://ithelp.ithome.com.tw/upload/images/20231015/20140477SfOnczABBL.jpg


上一篇
『Day29』DAG 程式碼設計優化方向
系列文
Data pipeline 建起來!用 Airflow 開發你的 Data pipeline30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chihying
iT邦新手 4 級 ‧ 2023-10-16 08:52:30

恭喜完賽!/images/emoticon/emoticon12.gif

感謝!!
也恭喜你完賽~

我要留言

立即登入留言